﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MVC4WPF.Automation.Wizards
{
    /// <summary>
    /// Static constants class that holds all the uncommon parameter types that are used throughout the MVC4WPF wizards.
    /// </summary>
    public static class WizardParameters
    {
        /// <summary>
        /// The file name of the template to process. This does not include any file path.
        /// </summary>
        public const string TEMPLATENAME = "TemplateName";

        /// <summary>
        /// The version of MVC4WPF that the template belongs to.
        /// </summary>
        public const string TEMPLATEVERSION = "TemplateVersion";

        /// <summary>
        /// For any template that will show a custom dialog, this will display on the title of the dialog.
        /// </summary>
        public const string DIALOGTITLE = "DialogTitle";

        /// <summary>
        /// For a contract template, the type of contract being used.
        /// </summary>
        public const string CONTRACTTYPE = "ContractType";
        
        /// <summary>
        /// For a view template, the type of view being used.
        /// </summary>
        public const string VIEWTYPE = "ViewType";

        /// <summary>
        /// For a controller template, the type of controller being used.
        /// </summary>
        public const string CONTROLLERTYPE = "ControllerType";

        /// <summary>
        /// For a view template, the type of the base view being used.
        /// </summary>
        public const string BASETYPE = "BaseType";

        /// <summary>
        /// For a contract template, the base of the type of contract being used.
        /// </summary>
        public const string CONTRACTBASETYPE = "ContractBaseType";

        /// <summary>
        /// For a contract template, the interface for the property bag, if applicable.
        /// </summary>
        public const string PROPERTYBAGINTERFACE = "PropertyBagInterface";

        /// <summary>
        /// For a view template, a flag to indicate whether to attach a title property to the view.
        /// </summary>
        public const string DISPLAYTITLE = "DisplayTitle";

        /// <summary>
        /// For a template using the property T4 template, the name of the template.
        /// </summary>
        public const string PROPERTYTEMPLATENAME = "PropertyTemplateName";

        /// <summary>
        /// For a template using the event T4 template, the name of the template.
        /// </summary>
        public const string EVENTTEMPLATENAME = "EventTemplateName";

        /// <summary>
        /// For a template using the method T4 template, the name of the template.
        /// </summary>
        public const string METHODTEMPLATENAME = "MethodTemplateName";

        /// <summary>
        /// For a template using the release property T4 template, the name of the template.
        /// </summary>
        public const string RELEASEPROPERTYTEMPLATENAME = "ReleasePropertyTemplateName";

        /// <summary>
        /// For a template using the release events T4 template, the name of the template.
        /// </summary>
        public const string RELEASEEVENTTEMPLATENAME = "ReleaseEventTemplateName";

        /// <summary>
        /// For a template using the subscribe to events T4 template, the name of the template.
        /// </summary>
        public const string SUBSCRIBETOEVENTTEMPLATENAME = "SubscribeToEventTemplateName";

        /// <summary>
        /// For a template using the event handler T4 template, the name of the template.
        /// </summary>
        public const string EVENTHANDLERTEMPLATENAME = "EventHandlerTemplateName";

        /// <summary>
        /// For a template using the release event handler T4 template, the name of the template.
        /// </summary>
        public const string RELEASEEVENTHANDLERTEMPLATENAME = "ReleaseEventHandlerTemplateName";

        /// <summary>
        /// For a template using the property T4 template, the resulting content of the template.
        /// </summary>
        public const string PROPERTYTEMPLATECONTENT = "PropertyTemplateContent";

        /// <summary>
        /// For a template using the event T4 template, the resulting content of the template.
        /// </summary>
        public const string EVENTTEMPLATECONTENT = "EventTemplateContent";

        /// <summary>
        /// For a template using the method T4 template, the resulting content of the template.
        /// </summary>
        public const string METHODTEMPLATECONTENT = "MethodTemplateContent";

        /// <summary>
        /// For a template using the release property T4 template, the resulting content of the template.
        /// </summary>
        public const string RELEASEPROPERTYTEMPLATECONTENT = "ReleasePropertyTemplateContent";

        /// <summary>
        /// For a template using the release events T4 template, the resulting content of the template.
        /// </summary>
        public const string RELEASEEVENTTEMPLATECONTENT = "ReleaseEventTemplateContent";

        /// <summary>
        /// For a template using the subscribe to events T4 template, the resulting content of the template.
        /// </summary>
        public const string SUBSCRIBETOEVENTTEMPLATECONTENT = "SubscribeToEventTemplateContent";

        /// <summary>
        /// For a template using the event handler T4 template, the resulting content of the template.
        /// </summary>
        public const string EVENTHANDLERTEMPLATECONTENT = "EventHandlerTemplateContent";

        /// <summary>
        /// For a template using the release event handler T4 template, the resulting content of the template.
        /// </summary>
        public const string RELEASEEVENTHANDLERTEMPLATECONTENT = "ReleaseEventHandlerTemplateContent";

        /// <summary>
        /// For a view template, the name of the contract the view is implementing.
        /// </summary>
        public const string VIEWCONTRACTNAME = "ViewContractName";

        /// <summary>
        /// For a controller template, the name of the contract the controller is implementing, if applicable.
        /// </summary>
        public const string CONTROLLERCONTRACTNAME = "ControllerContractName";

        /// <summary>
        /// For a model template, the name of the contract the model is implementing.
        /// For a controller template, the name of the controller model contract the controller is implementing.
        /// </summary>
        public const string MODELCONTRACTNAME = "ModelContractName";

        /// <summary>
        /// For a controller contract, the name of the controller model contract the controller is implementing, if applicable.
        /// </summary>
        public const string CONTROLLERMODELCONTRACTNAME = "ControllerModelContractName";

        /// <summary>
        /// For a controller contract, a flag to indicate whether or not the controller implements a controller model contract.
        /// </summary>
        public const string CONTROLLERUSESMODELCONTRACT = "ControllerUsesModelContract";

        /// <summary>
        /// For a template using the subscribe to model events T4 template, the name of the template.
        /// </summary>
        public const string SUBSCRIBETOMODELEVENTTEMPLATENAME = "SubscribeToModelEventTemplateName";

        /// <summary>
        /// For a template using the model event handler T4 template, the name of the template.
        /// </summary>
        public const string MODELEVENTHANDLERTEMPLATENAME = "ModelEventHandlerTemplateName";

        /// <summary>
        /// For a template using the release model event handler T4 template, the name of the template.
        /// </summary>
        public const string RELEASEMODELEVENTHANDLERTEMPLATENAME = "ReleaseModelEventHandlerTemplateName";

        /// <summary>
        /// For a template using the subscribe to model events T4 template, the resulting content of the template.
        /// </summary>
        public const string SUBSCRIBETOMODELEVENTTEMPLATECONTENT = "SubscribeToModelEventTemplateContent";

        /// <summary>
        /// For a template using the model event handler T4 template, the resulting content of the template.
        /// </summary>
        public const string MODELEVENTHANDLERTEMPLATECONTENT = "ModelEventHandlerTemplateContent";

        /// <summary>
        /// For a template using the release model event handler T4 template, the resulting content of the template.
        /// </summary>
        public const string RELEASEMODELEVENTHANDLERTEMPLATECONTENT = "ReleaseModelEventHandlerTemplateContent";
    }
}
